/**
 * @file PruebaDAO.java
 * @brief Implementa la clase PruebaDAO
 *
 * Implementa la clase PruebaDAO usada para manejar la información de
 * los pruebas del sistema.
 *
 * @author Antonio M. Gutierrez Martinez
 * @version 01.05
 *
 */

package GestorPruebas;

import Controlador.UsuariosDisponibles;
import GestorUsuarios.IDException;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;

import Servicios.Conexion;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

public class PruebaDAO {
    	/**
	 * @brief Cadenas relacionadas con el estado
	 */
	private static final String ESTADO_PENDIENTE = "P";
	private static final String ESTADO_NO_REALIZADA = "N";
	private static final String ESTADO_CANCELADA = "C";
        private static final String ESTADO_REALIZADA = "R";
        private static final String ESTADO_VISUALIZABLE = "V";

	/**
	 * @brief Cadenas relacionadas con el tipo prueba
	 */
        private static final String TIPOPRUEBA_HematologiaGeneral =  "HG";
        private static final String TIPOPRUEBA_BioquimicaGeneral = "B";
	private static final String TIPOPRUEBA_MarcadoresTumorales = "M";
	private static final String TIPOPRUEBA_Hormonas = "Ho";
	private static final String TIPOPRUEBA_Urianalisis = "U";
	private static final String TIPOPRUEBA_Hemostasia = "He";
        private static final String TIPOPRUEBA_Radiografia = "R";
        /**
	 * @brief Cadenas relacionadas con las tablas
	 */
        private static final String TABLA_Prueba = "Prueba(fecha,fechaResultado,estado,tipo,idPaciente,idMedico,idTecnicoPruebas,idCita)";
        private static final String TABLA_HematologiaGeneral =  "PruebaHematologia(idPrueba,basofilosPorc,concentracionHemoCorp,dispersionHematies,"
                        + "eosinofilos,hematies,hematocritos,hemoglobinaCorpMedia,hemoglobina,leucocitos,"
                        + "linfocitos,monocitosPorc,neutrofilos,neutrofilosPorc,plaquetas,volumenCorpMedio,"
                        + "volumenPlaquetarioMedio,monocitos,eosinofilosPorc,basofilos,linfocitosPorc)";
        private static final String TABLA_BioquimicaGeneral = "PruebaBioquimica (idPrueba, acidoUrico, creatinina, urea, glucosa, colesterol,"
                        + "colesterolHDL, colesterolLDL, trigliceridos,bilirrubinaTotal, gammaGlutamiltransferosa,"
                        + "aspartatoTransaminasa, alaminaTransaminasa)";
	private static final String TABLA_MarcadoresTumorales = "PruebaMarcadoresTumorales (idPrueba, PSA)";
	private static final String TABLA_Hormonas = "PruebaHormonas (idPrueba , tirotropina)";
	private static final String TABLA_Urianalisis = "PruebaUrianalisis (idPrueba , sistematicoOrina)";
	private static final String TABLA_Hemostasia = "PruebaHemostasia (idPrueba, actividadProtombinaPorc,"
                        + " actividadProtombina, tiempoTromboplastinaParcActivo)";
        private static final String TABLA_Radiografia = "PruebaRadiografia (idPrueba, tipo)";
       
    /**
     * @brief añade un objeto prueba al sistema
     * @param p
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException, IDException
     */
    public static void add(Prueba p) throws SQLException, IOException,ClassNotFoundException, IDException, NoSuchAlgorithmException{

        String estado="";
	String tipo="";
        String tabla="" ;
        String consulta=null , consulta2=null;
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //seleccionamos el estado de la prueba
        switch (p.getEstadoPrueba()) {
            case Pendiente:
                estado = ESTADO_PENDIENTE;break;
            case No_realizada:
                estado = ESTADO_NO_REALIZADA;break;
            case Cancelada:
                estado = ESTADO_CANCELADA;break;
            case Realizada:
                estado = ESTADO_REALIZADA; break;
            case Visualizable:
                estado = ESTADO_VISUALIZABLE; break;
            default: estado = ESTADO_PENDIENTE; break;
        }

        //seleccionamos el tipo de prueba y la tabla de la prueba
        switch (p.getTipo()) {
            case HematologiaGeneral:
                tipo = TIPOPRUEBA_HematologiaGeneral;
                tabla = TABLA_HematologiaGeneral;
                break;
            case BioquimicaGeneral:
                tipo = TIPOPRUEBA_BioquimicaGeneral;
                tabla = TABLA_BioquimicaGeneral;
                break;
            case MarcadoresTumorales:
                tipo = TIPOPRUEBA_MarcadoresTumorales;
                tabla = TABLA_MarcadoresTumorales;
                break;
            case Hormonas:
                tipo = TIPOPRUEBA_Hormonas;
                tabla = TABLA_Hormonas;
                break;
            case Urianalisis:
                tipo = TIPOPRUEBA_Urianalisis;
                tabla = TABLA_Urianalisis;
                break;
            case Hemostasia:
                tipo = TIPOPRUEBA_Hemostasia;
                tabla = TABLA_Hemostasia;
                break;
            case Radiografia:
                tipo = TIPOPRUEBA_Radiografia;
                tabla = TABLA_Radiografia;
            default:
                break;
        }
       
        //Si tenemos una prueba padre
        if (p.getIdPrueba() == null) {
            String fechaResultados ;
            if (p.getFechaResultados() != null){
                    fechaResultados = "\'"+ formatoFecha.format(p.getFechaResultados()) + "\'";
            } else  fechaResultados = "NULL";

            consulta = "INSERT INTO "+ TABLA_Prueba +" VALUES "
                + "(\'" + formatoFecha.format(p.getFecha())
                + "\'," + fechaResultados
                + ",\'" + estado
                + "\',\'" + tipo
                + "\'," + p.getIdPaciente()
                + ", " + p.getIdMedico()
                + "," + p.getIdTecnicoPruebas()
                + "," + p.getIdCita() + ");";
        }
        else { //se trata de los resultados de una prueba
            
            if ( p.getTipo() == TipoPrueba.BioquimicaGeneral) {
                BioquimicaGeneral g = (BioquimicaGeneral) p;
                consulta = "INSERT INTO "+ TABLA_BioquimicaGeneral +" VALUES "
                + "(\'" + g.getIdPrueba()
                + "\',\'" + g.getAcidoUrico()
                + "\',\'" + g.getCreatinina()
                + "\',\'" + g.getUrea()
                + "\',\'" + g.getGlucosa()
                + "\',\'" + g.getColesterol()
                + "\',\'" + g.getColesterolHDL()
                + "\',\'" + g.getcolesterolLDL()
                + "\',\'" + g.getTrigliceridos()
                + "\',\'" + g.getBilirrubinaTotal()
                + "\',\'" + g.getGammaGlutamiltransferasa()
                + "\',\'" + g.getAspartatoTransaminasa()
                + "\',\'" + g.getAlaminaTransaminasa()
                + "\');";
            }
            else if ( p.getTipo() == TipoPrueba.Hormonas) {
                Hormonas h = (Hormonas) p;
                consulta = "INSERT INTO "+ TABLA_Hormonas +" VALUES "
                + "(\'" + h.getIdPrueba()
                + "\',\'" + h.getTirotropina()
                + "\');";
            }
            else if ( p.getTipo() == TipoPrueba.MarcadoresTumorales) {
                MarcadoresTumorales t = (MarcadoresTumorales) p ;
                consulta = "INSERT INTO "+ TABLA_MarcadoresTumorales +" VALUES "
                + "(\'" + t.getIdPrueba()
                + "\',\'" + t.getPSA()
                + "\');";
            }

            else if(p.getTipo() == TipoPrueba.HematologiaGeneral) {
                HematologiaGeneral h = (HematologiaGeneral) p;
                consulta = "INSERT INTO "+ TABLA_HematologiaGeneral +" VALUES "
                + "(\'" + h.getIdPrueba()
                + "\',\'" + h.getBasofilosPorc()
                + "\',\'" + h.getConcentracionHemoCorp()
                + "\',\'" + h.getDispersionHematies()
                + "\',\'" + h.getEosinofilos()
                + "\',\'" + h.getHematies()
                + "\',\'" + h.getHematocritos()
                + "\',\'" + h.getHemoglobinaCorpMedia()
                + "\',\'" + h.getHemoglobina()
                + "\',\'" + h.getLeucocitos()
                + "\',\'" + h.getLinfocitos()
                + "\',\'" + h.getMonocitosPorc()
                + "\',\'" + h.getNeutrofilos()
                + "\',\'" + h.getNeutrofilosPorc()
                + "\',\'" + h.getPlaquetas()
                + "\',\'" + h.getVolumenCorpMedio()
                + "\',\'" + h.getVolumenPlaquetarioMedio()
                + "\',\'" + h.getMonocitos()
                + "\',\'" + h.getEosinofilosPorc()
                + "\',\'" + h.getBasofilos()
                + "\',\'" + h.getLinfocitosPorc()
                + "\');";
            }
            else if ( p.getTipo() == TipoPrueba.Hemostasia) {
                Hemostasia h = (Hemostasia) p;
                consulta = "INSERT INTO "+ TABLA_Hemostasia +" VALUES "
                + "(\'" + h.getIdPrueba()
                + "\',\'" + h.getActividadProtombinaPorcentaje()
                + "\',\'" + h.getActividadProtombina()
                + "\',\'" + h.getTiempoTombloplastinaParcialAct()
                + "\');";
            }
            else if(p.getTipo() == TipoPrueba.Urianalisis) {
                Urianalisis u = (Urianalisis) p;
                consulta = "INSERT INTO "+ TABLA_Urianalisis +" VALUES "
                + "(\'" + u.getIdPrueba()
                + "\',\'"+ u.getOrina()
                +"\');";
            }else {
                consulta = "UPDATE PruebaRadiografia SET "
                   + " tipo=\'" + ((Radiografia)p).getTipoRadiografia()
                   + "\' WHERE idPrueba="+p.getIdPrueba()+";";

            }/*else {
                Radiografia u = (Radiografia) p;
                consulta = "INSERT INTO "+ TABLA_Radiografia +" VALUES "
                + "(\'" + u.getIdPrueba()
                + "\',\'"+ u.getTipoRadiografia()
                +"\');";
            }*/


            //Consulta actualizacion del resultado de la fecha
            String fechaResultado;
            if ( p.getFechaResultados()!=null) {
                fechaResultado = "\'"+formatoFecha.format(p.getFechaResultados())+"\'";
            }else
                fechaResultado = "NULL";

            consulta2 = "UPDATE Prueba SET fechaResultado="+ fechaResultado
                    + " WHERE idPrueba="+p.getIdPrueba()+";";
            
        }

        //Realizamos la insercion de la clase prueba
        Conexion.conectar();
        if (consulta2!=null){ Conexion.actualizar(consulta2);}
        ResultSet key = Conexion.actualizar(consulta);

        //Obtenemos el id introducido
        if ( p.getIdPrueba() == null ){
            if (key.next()) {
                p.setIdPrueba(key.getInt(1));

                if ( p.getTipo() == TipoPrueba.Radiografia ) { //metemos el tipo de prueba del hijo si es una radiografia
                    consulta2 = "INSERT INTO "+ TABLA_Radiografia +" VALUES "
                            + "(\'" + p.getIdPrueba()
                            + "\',\'"+ ((Radiografia)p).getTipoRadiografia()
                            + "\');";
                    Conexion.actualizar(consulta2);
                }
            } else
                throw new IDException();
        }
        
        Conexion.desconectar();

    }

    /**
     * @brief Elimina logicamente una prueba de la BD
     * @param p
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException
     */
    public static void delete(Prueba p) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException{
        p.setEstadoPrueba(EstadoPrueba.Cancelada);
        PruebaDAO.update(p);
    }

    /**
     * @brief Elimina una prueba de la BD
     * @param p
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException
     */
    public static void deleteHard(Prueba p) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException{
        String consulta = "DELETE FROM Prueba WHERE idPrueba = " + p.getIdPrueba() + ";";
        String consulta2 , tabla="PruebaHematologia" ;

        //seleccionamos el tipo de prueba y la tabla de la prueba
        switch (p.getTipo()) {
            case HematologiaGeneral:
                tabla = "PruebaHematologia";break;
            case BioquimicaGeneral:
                tabla = "PruebaBioquimica";break;
            case MarcadoresTumorales:
                tabla = "PruebaMarcadoresTumorales";break;
            case Hormonas:
                tabla = "PruebaHormonas";break;
            case Urianalisis:
                tabla = "PruebaUrianalisis";break;
            case Hemostasia:
                tabla = "PruebaHemostasia";break;
            case Radiografia:
                tabla = "PruebaRadiografia";break;
            default:
                break;
        }

        consulta2 = "DELETE FROM "+ tabla + " WHERE idPrueba = " + p.getIdPrueba() + ";";

        //realizamos el borrado
        Conexion.conectar();
        Conexion.actualizar(consulta2);
        Conexion.actualizar(consulta);
        Conexion.desconectar();
    }
    
    /**
     * @brief Obtiene la prueba con el id indicado.
     * @param i
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException
     */
    public static Prueba get(int id) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException{
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Prueba res = null ;
        String consulta = "SELECT * FROM Prueba WHERE idPrueba="+id+";";

        Conexion.conectar();
        ResultSet tabla = Conexion.consultar(consulta) ;
        ResultSet tabla2 = null;
        
        if (tabla.next()) { //hemos encontrado algo
            Integer idPr = tabla.getInt("idPrueba") ;
            Date fecha = formatoFecha.parse(tabla.getString("fecha")) ;
            Date fechaResultado;
            try {
                fechaResultado = formatoFecha.parse(tabla.getString("fechaResultado")) ;
            }catch (Exception ex) {
                fechaResultado = null;
            }
            Integer idC = tabla.getInt("idCita");
            Integer idM = tabla.getInt("idMedico");
            Integer idP = tabla.getInt("idPaciente");
            Integer idT = tabla.getInt("idTecnicoPruebas");
            

            String s_estado = tabla.getString("estado");
            EstadoPrueba estado = null;
            if ( s_estado.equals(ESTADO_PENDIENTE) )
                estado = EstadoPrueba.Pendiente;
            else if ( s_estado.equals(ESTADO_NO_REALIZADA) )
                estado = EstadoPrueba.No_realizada;
            else if ( s_estado.equals(ESTADO_CANCELADA) )
                estado = EstadoPrueba.Cancelada;
            else if ( s_estado.equals(ESTADO_REALIZADA) )
                estado = EstadoPrueba.Realizada;
            else
                estado = EstadoPrueba.Visualizable;

            String s_tipo = tabla.getString("tipo");
            TipoPrueba tipo = null;
            if ( s_tipo.equals(TIPOPRUEBA_BioquimicaGeneral) ) {
                tipo = TipoPrueba.BioquimicaGeneral;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaBioquimica WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new BioquimicaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT, tabla2.getFloat("acidoUrico"),
                            tabla2.getFloat("creatinina"),tabla2.getFloat("urea"),tabla2.getFloat("glucosa"),tabla2.getFloat("colesterol"),
                            tabla2.getFloat("colesterolHDL"),tabla2.getFloat("colesterolLDL"),tabla2.getFloat("trigliceridos"),
                            tabla2.getFloat("bilirrubinaTotal"),tabla2.getFloat("gammaGlutamiltransferosa"),
                            tabla2.getFloat("aspartatoTransaminasa"),tabla2.getFloat("alaminaTransaminasa"));
                }
                else {
                    res = new BioquimicaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();
            }
            else if ( s_tipo.equals(TIPOPRUEBA_HematologiaGeneral) ) {
                tipo = TipoPrueba.HematologiaGeneral;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaHematologia WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new HematologiaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT, tabla2.getFloat("basofilosPorc"),tabla2.getFloat("concentracionHemoCorp"),
                            tabla2.getFloat("dispersionHematies"),tabla2.getFloat("eosinofilos"),tabla2.getFloat("hematies"),
                            tabla2.getFloat("hematocritos"),tabla2.getFloat("hemoglobinaCorpMedia"),tabla2.getFloat("hemoglobina"),
                            tabla2.getFloat("leucocitos"),tabla2.getFloat("linfocitos"),tabla2.getFloat("monocitosPorc"),
                            tabla2.getFloat("neutrofilos"),tabla2.getFloat("neutrofilosPorc"),tabla2.getFloat("plaquetas"),
                            tabla2.getFloat("volumenCorpMedio"),tabla2.getFloat("volumenPlaquetarioMedio"),tabla2.getFloat("monocitos"),
                            tabla2.getFloat("eosinofilosPorc"),tabla2.getFloat("basofilos"),tabla2.getFloat("linfocitosPorc"));
                }
                else {
                    res = new HematologiaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();

            }
            else if ( s_tipo.equals(TIPOPRUEBA_MarcadoresTumorales) ) {
                tipo = TipoPrueba.MarcadoresTumorales;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaMarcadoresTumorales WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new MarcadoresTumorales(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT,tabla2.getFloat("PSA"));
                }
                else {
                    res = new MarcadoresTumorales(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Hormonas) ) {
                tipo = TipoPrueba.Hormonas;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaHormonas WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new Hormonas(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT,tabla2.getFloat("tirotropina"));
                }
                else {
                    res = new Hormonas(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Urianalisis) ) {
                tipo = TipoPrueba.Urianalisis;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaUrianalisis WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new Urianalisis(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT,tabla2.getFloat("sistematicoOrina"));
                }
                else {
                    res = new Urianalisis(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Hemostasia) ) {
                tipo = TipoPrueba.Hemostasia;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaHemostasia WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    res = new Hemostasia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT,tabla2.getFloat("actividadProtombina"),
                            tabla2.getFloat("actividadProtombinaPorc"),tabla2.getFloat("tiempoTromboplastinaParcActivo"));
                }
                else {
                    res = new Hemostasia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Radiografia) ){
                tipo = TipoPrueba.Radiografia;
                tabla2 = Conexion.consultar("SELECT * FROM PruebaRadiografia WHERE idPrueba="+id+";");
                if ( tabla2.next() ) { //si existe el hijo
                    TipoRadiografia t ;
                    //vemos el tipo de radiografia
                    if (tabla2.getString("tipo").equals("CR"))
                        t = TipoRadiografia.CR;
                    else if (tabla2.getString("tipo").equals("A"))
                        t = TipoRadiografia.A;
                    else if (tabla2.getString("tipo").equals("CL"))
                        t = TipoRadiografia.CL;
                    else if (tabla2.getString("tipo").equals("H"))
                        t = TipoRadiografia.H;
                    else if (tabla2.getString("tipo").equals("ID"))
                        t = TipoRadiografia.ID;
                    else if (tabla2.getString("tipo").equals("II"))
                        t = TipoRadiografia.II;
                    else if (tabla2.getString("tipo").equals("SD"))
                        t = TipoRadiografia.SD;
                    else if (tabla2.getString("tipo").equals("SI"))
                        t = TipoRadiografia.SI;
                    else if (tabla2.getString("tipo").equals("T"))
                        t = TipoRadiografia.T;
                    else if (tabla2.getString("tipo").equals("TC"))
                        t = TipoRadiografia.TC;
                    else
                        t = TipoRadiografia.TM;

                    res = new Radiografia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT,t);
                }
                else {
                    res = new Radiografia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT);
                }
                tabla2.close();

            }
        }
        
        Conexion.desconectar();
        
        return res;
    }

    /**
     * @brief Obtiene las pruebas en funcion de los parametros pasdos como argumento
     * @param idCita
     * @param idMedico
     * @param idPaciente
     * @param idTecnicoPruebas
     * @param e
     * @param f
     * @return array de pruebas
     * @throws SQLException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws NoSuchAlgorithmException
     */
    public static Prueba[] get(Integer idCita , Integer idMedico, Integer idPaciente,
            Integer idTecnicoPruebas ,EstadoPrueba e, TipoPrueba t, Date finicio, Date ffin)
            throws SQLException, IOException,ClassNotFoundException, NoSuchAlgorithmException, ParseException
    {
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Prueba[] resultados = null;

        String where = "WHERE ";
		if(idCita!=null)
			where += "idCita = \'"+ idCita +"\' AND ";
		if(idMedico!=null)
			where += "idMedico = \'"+ idMedico +"\' AND ";
		if(idPaciente!=null)
			where += "idPaciente = \'"+ idPaciente +"\' AND ";
		if(idTecnicoPruebas!=null)
			where += "idTecnicoPruebas = \'"+ idTecnicoPruebas +"\' AND ";
		if(e!=null)
			if(e==EstadoPrueba.Cancelada)
				where += "estado = \'"+ ESTADO_CANCELADA +"\'  AND ";
			else if(e==EstadoPrueba.No_realizada)
				where += "estado = \'"+ ESTADO_NO_REALIZADA +"\'  AND ";
			else if(e==EstadoPrueba.Pendiente)
				where += "estado = \'"+ ESTADO_PENDIENTE +"\'  AND ";
                        else if(e==EstadoPrueba.Realizada)
				where += "estado = \'"+ ESTADO_REALIZADA +"\'  AND ";
                        else if(e==EstadoPrueba.Visualizable)
				where += "estado = \'"+ ESTADO_VISUALIZABLE +"\'  AND ";
                if(t!=null)
			if(t==TipoPrueba.BioquimicaGeneral)
				where += "tipo = \'"+ TIPOPRUEBA_BioquimicaGeneral +"\'  AND ";
			else if(t==TipoPrueba.HematologiaGeneral)
				where += "tipo = \'"+ TIPOPRUEBA_HematologiaGeneral +"\'  AND ";
			else if(t==TipoPrueba.Hemostasia)
				where += "tipo = \'"+ TIPOPRUEBA_Hemostasia +"\'  AND ";
                        else if(t==TipoPrueba.Hormonas)
				where += "tipo = \'"+ TIPOPRUEBA_Hormonas +"\'  AND ";
                        else if(t==TipoPrueba.MarcadoresTumorales)
				where += "tipo = \'"+ TIPOPRUEBA_MarcadoresTumorales +"\'  AND ";
                        else if(t==TipoPrueba.Urianalisis)
				where += "tipo = \'"+ TIPOPRUEBA_Urianalisis +"\'  AND ";
                        else
				where += "tipo = \'"+ TIPOPRUEBA_Radiografia +"\'  AND ";
        
                if (finicio != null)
                        where += "fecha >= \'"+ formatoFecha.format(finicio) +"\' AND ";
                if (ffin != null)
                        where += "fecha <= \'"+ formatoFecha.format(ffin) +"\' AND ";

	// Sustituimos coma final, por punto y coma
	where = where.substring(0, where.length()-4)+";";
        
        Conexion.conectar();
        ResultSet tabla = Conexion.consultar("SELECT * FROM Prueba " + where);
        ArrayList<Prueba> list_pruebas = new ArrayList<Prueba>();

        //sacamos las pruebas
        while(tabla.next()) {
            Integer idPr = tabla.getInt("idPrueba") ;
            Date fecha = formatoFecha.parse(tabla.getString("fecha")) ;
            Date fechaResultado;
            try {
                fechaResultado = formatoFecha.parse(tabla.getString("fechaResultado")) ;
            }catch (Exception ex) {
                fechaResultado = null;
            }
            Integer idC = tabla.getInt("idCita");
            Integer idM = tabla.getInt("idMedico");
            Integer idP = tabla.getInt("idPaciente");
            Integer idT = tabla.getInt("idTecnicoPruebas");

            String s_estado = tabla.getString("estado");
            EstadoPrueba estado = null;
            if ( s_estado.equals(ESTADO_PENDIENTE) )
                estado = EstadoPrueba.Pendiente;
            else if ( s_estado.equals(ESTADO_NO_REALIZADA) )
                estado = EstadoPrueba.No_realizada;
            else if ( s_estado.equals(ESTADO_CANCELADA) )
                estado = EstadoPrueba.Cancelada;
            else if ( s_estado.equals(ESTADO_REALIZADA) )
                estado = EstadoPrueba.Realizada;
            else
                estado = EstadoPrueba.Visualizable;

            String s_tipo = tabla.getString("tipo");
            TipoPrueba tipo = null;
            if ( s_tipo.equals(TIPOPRUEBA_BioquimicaGeneral) ) {
                tipo = TipoPrueba.BioquimicaGeneral;
                list_pruebas.add(new BioquimicaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
            else if ( s_tipo.equals(TIPOPRUEBA_HematologiaGeneral) ) {
                tipo = TipoPrueba.HematologiaGeneral;
                list_pruebas.add(new HematologiaGeneral(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));

            }
            else if ( s_tipo.equals(TIPOPRUEBA_MarcadoresTumorales) ) {
                tipo = TipoPrueba.MarcadoresTumorales;
                list_pruebas.add(new MarcadoresTumorales(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Hormonas) ) {
                tipo = TipoPrueba.Hormonas;
                list_pruebas.add(new Hormonas(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Urianalisis) ) {
                tipo = TipoPrueba.Urianalisis;
                list_pruebas.add(new Urianalisis(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
            else if ( s_tipo.equals(TIPOPRUEBA_Hemostasia) ) {
                tipo = TipoPrueba.Hemostasia;
                list_pruebas.add(new Hemostasia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
            else if(s_tipo.equals(TIPOPRUEBA_Radiografia)) {
                tipo = TipoPrueba.Radiografia;
                list_pruebas.add(new Radiografia(idPr,estado,fecha,fechaResultado, tipo, idC, idM,
                            idP, idT));
            }
        }//end while
        tabla.close();
        
        //sacamos los resultados
        for ( int i=0 ; i < list_pruebas.size() ; i++ ) {
            if ( list_pruebas.get(i).getTipo() == TipoPrueba.BioquimicaGeneral){
                tabla = Conexion.consultar("SELECT * FROM PruebaBioquimica WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((BioquimicaGeneral)list_pruebas.get(i)).setAcidoUrico(tabla.getFloat("acidoUrico"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setCreatinina(tabla.getFloat("creatinina"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setUrea(tabla.getFloat("urea"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setGlucosa(tabla.getFloat("glucosa"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setColesterol(tabla.getFloat("colesterol"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setColesterolHDL(tabla.getFloat("colesterolHDL"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setColesterolLDL(tabla.getFloat("colesterolLDL"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setTrigliceridos(tabla.getFloat("trigliceridos"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setBilirrubinaTotal(tabla.getFloat("bilirrubinaTotal"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setGammaGlutamiltransferasa(tabla.getFloat("gammaGlutamiltransferosa"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setAspartatoTransaminasa(tabla.getFloat("aspartatoTransaminasa"));
                    ((BioquimicaGeneral)list_pruebas.get(i)).setAlaminaTransaminasa(tabla.getFloat("alaminaTransaminasa"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.HematologiaGeneral){
                tabla = Conexion.consultar("SELECT * FROM PruebaHematologia WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((HematologiaGeneral)list_pruebas.get(i)).setBasofilosPorc(tabla.getFloat("basofilosPorc"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setConcentacionHemoCorp(tabla.getFloat("concentracionHemoCorp"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setDispersionHematies(tabla.getFloat("dispersionHematies"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setEosinofilos(tabla.getFloat("eosinofilos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setHematies(tabla.getFloat("hematies"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setHematocritos(tabla.getFloat("hematocritos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setHemoglobinaCorpMedia(tabla.getFloat("hemoglobinaCorpMedia"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setHemoglobina(tabla.getFloat("hemoglobina"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setLeucocitos(tabla.getFloat("leucocitos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setLinfocitos(tabla.getFloat("linfocitos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setMonocitosPorc(tabla.getFloat("monocitosPorc"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setNeutrofilos(tabla.getFloat("neutrofilos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setNeutrofilosPorc(tabla.getFloat("neutrofilosPorc"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setPlaquetas(tabla.getFloat("plaquetas"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setVolumenCorpMedio(tabla.getFloat("volumenCorpMedio"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setVolumenPlaquetarioMedio(tabla.getFloat("volumenPlaquetarioMedio"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setMonocitos(tabla.getFloat("monocitos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setEosinofilosPorc(tabla.getFloat("eosinofilosPorc"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setBasofilos(tabla.getFloat("basofilos"));
                    ((HematologiaGeneral)list_pruebas.get(i)).setLinfocitosPorc(tabla.getFloat("linfocitosPorc"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.Hemostasia){
                tabla = Conexion.consultar("SELECT * FROM PruebaHemostasia WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((Hemostasia)list_pruebas.get(i)).setActividadProtombina(tabla.getFloat("actividadProtombina"));
                    ((Hemostasia)list_pruebas.get(i)).setActividadProtombinaPorcentaje(tabla.getFloat("actividadProtombinaPorc"));
                    ((Hemostasia)list_pruebas.get(i)).setTiempoTombloplastinaParcialAct(tabla.getFloat("tiempoTromboplastinaParcActivo"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.Hormonas){
                tabla = Conexion.consultar("SELECT * FROM PruebaHormonas WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((Hormonas)list_pruebas.get(i)).setTirotropina(tabla.getFloat("tirotropina"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.MarcadoresTumorales){
                tabla = Conexion.consultar("SELECT * FROM PruebaMarcadoresTumorales WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((MarcadoresTumorales)list_pruebas.get(i)).setPSA(tabla.getFloat("PSA"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.Urianalisis){
                tabla = Conexion.consultar("SELECT * FROM PruebaUrianalisis WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    ((Urianalisis)list_pruebas.get(i)).setOrina(tabla.getFloat("sistematicoOrina"));
                }
            }
            else if ( list_pruebas.get(i).getTipo() == TipoPrueba.Radiografia){
                tabla = Conexion.consultar("SELECT * FROM PruebaRadiografia WHERE idPrueba=" + list_pruebas.get(i).getIdPrueba());
                if (tabla.next()) { //si hay tablas
                    TipoRadiografia tip ;
                    //vemos el tipo de radiografia
                    if (tabla.getString("tipo").equals("CR"))
                        tip = TipoRadiografia.CR;
                    else if (tabla.getString("tipo").equals("A"))
                        tip = TipoRadiografia.A;
                    else if (tabla.getString("tipo").equals("CL"))
                        tip = TipoRadiografia.CL;
                    else if (tabla.getString("tipo").equals("H"))
                        tip = TipoRadiografia.H;
                    else if (tabla.getString("tipo").equals("ID"))
                        tip = TipoRadiografia.ID;
                    else if (tabla.getString("tipo").equals("II"))
                        tip = TipoRadiografia.II;
                    else if (tabla.getString("tipo").equals("SD"))
                        tip = TipoRadiografia.SD;
                    else if (tabla.getString("tipo").equals("SI"))
                        tip = TipoRadiografia.SI;
                    else if (tabla.getString("tipo").equals("T"))
                        tip = TipoRadiografia.T;
                    else if (tabla.getString("tipo").equals("TC"))
                        tip = TipoRadiografia.TC;
                    else
                        tip = TipoRadiografia.TM;
                    
                    ((Radiografia)list_pruebas.get(i)).setTipoRadiografia(tip);
                }
            }
        
        }
        tabla.close();

        Conexion.desconectar();
        
        //devolvemos lo encontrado
        if(list_pruebas.size()>0) {
            resultados = new Prueba[list_pruebas.size()];
            list_pruebas.toArray(resultados);
	}
        
	return resultados;
    }

    /**
     * Encuentra los tecnico disponibles para realizar pruebas medicas entre las
     * fechas indicadas. Si la fin es nulo dare solo las fechas disponibles de ese dia.
     * @param inicio Fecha inicio
     * @param fin Fecha fin
     * @return Array de usuarios disponibles
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException
     */
    public static UsuariosDisponibles[] getFechasDisponibles(Date inicio, Date fin)
            throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException
    {
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        UsuariosDisponibles res[] = null;
        ArrayList<UsuariosDisponibles> d  = new ArrayList<UsuariosDisponibles>();
        Calendar calendario = Calendar.getInstance();
        calendario.setTime(inicio);
        int diaSemana;
        String stringDiaSemana="";
        String horaInicio;
        ResultSet tabla;

        if ( fin == null ) { //ponemos como fecha final el fin de dia 23:59:00
            Calendar aux ;
            aux = Calendar.getInstance();
            aux.setTime(inicio);
            aux.set(Calendar.HOUR_OF_DAY,23);
            aux.set(Calendar.MINUTE, 59);
            fin = aux.getTime();
        }
        
        Conexion.conectar();
	for ( int i=0 ; calendario.getTime().before(fin) ; i++)
        {
            //System.out.println("Dia semana "+stringDiaSemana);
            //System.out.println(formatoFecha.format(calendario.getTime()));
            
            //Vemos los datos previos
            diaSemana = calendario.get(Calendar.DAY_OF_WEEK);
            if(diaSemana==Calendar.MONDAY)
		stringDiaSemana = "l";
            else if(diaSemana==Calendar.TUESDAY)
		stringDiaSemana = "m";
            else if(diaSemana==Calendar.WEDNESDAY)
		stringDiaSemana = "x";
            else if(diaSemana==Calendar.THURSDAY)
		stringDiaSemana = "j";
            else if(diaSemana==Calendar.FRIDAY)
		stringDiaSemana = "v";
            else if(diaSemana==Calendar.SATURDAY)
		stringDiaSemana = "s";
            else if(diaSemana==Calendar.SUNDAY)
		stringDiaSemana = "d";

            horaInicio = "" + calendario.get(Calendar.HOUR_OF_DAY);

            //Realizamos la consulta
            tabla = Conexion.consultar("SELECT * FROM Usuario u WHERE u.tipoUsuario='t' AND u.estado='a' AND NOT EXISTS (SELECT * FROM Prueba p WHERE p.idTecnicoPruebas=u.idUsuario AND p.estado='p' AND p.fecha=\'"
			+formatoFecha.format(calendario.getTime())+"\')" +
			" AND EXISTS (SELECT * FROM HoraTrabajo h, trabaja t WHERE h.diaSemana=\'"+stringDiaSemana+"\' AND h.horaInicio=\'"+horaInicio+"\' AND h.idHoraTrabajo=t.idHoraTrabajo AND t.idUsuario=u.idUsuario );");

            d.add(new UsuariosDisponibles(calendario.getTime(),null));
            while (tabla.next()) {
                (d.get(i)).setId(tabla.getInt("idUsuario"));
            }

            //añadimos 20 minutos del periodo entre prueba y prueba
            calendario.add(Calendar.MINUTE, 20);
        }//end for
        
        Conexion.desconectar();
        
        //devolvemos el resultados
        if(d.size()>0) {
            //System.out.println(d.size());
            res = new UsuariosDisponibles[d.size()];
            d.toArray(res);
	}

        return res;
    }


    /**
     * Actualiza una prueba del sistema
     * @param p
     * @throws ClassNotFoundException, IOException, SQLException, NoSuchAlgorithmException
     */
    public static void update(Prueba p) throws SQLException, IOException, ClassNotFoundException,
            NoSuchAlgorithmException
    {
        String estado="";
	String tipo="";
        String consulta=null , consulta2=null;
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //seleccionamos el estado de la prueba
        switch (p.getEstadoPrueba()) {
            case Pendiente:
                estado = ESTADO_PENDIENTE;break;
            case No_realizada:
                estado = ESTADO_NO_REALIZADA;break;
            case Cancelada:
                estado = ESTADO_CANCELADA;break;
            case Realizada:
                estado = ESTADO_REALIZADA; break;
            case Visualizable:
                estado = ESTADO_VISUALIZABLE; break;
            default: estado = ESTADO_PENDIENTE; break;
        }

        //seleccionamos el tipo de prueba y la tabla de la prueba
        switch (p.getTipo()) {
            case HematologiaGeneral:
                tipo = TIPOPRUEBA_HematologiaGeneral;break;
            case BioquimicaGeneral:
                tipo = TIPOPRUEBA_BioquimicaGeneral;break;
            case MarcadoresTumorales:
                tipo = TIPOPRUEBA_MarcadoresTumorales;break;
            case Hormonas:
                tipo = TIPOPRUEBA_Hormonas;break;
            case Urianalisis:
                tipo = TIPOPRUEBA_Urianalisis;break;
            case Hemostasia:
                tipo = TIPOPRUEBA_Hemostasia;break;
            case Radiografia:
                tipo = TIPOPRUEBA_Radiografia;break;
            default:
                break;
        }

        //Formamos la consulta
        String fechaResultados ;
        if (p.getFechaResultados() != null){
            fechaResultados = "\'"+ formatoFecha.format(p.getFechaResultados()) + "\'";
        } else  fechaResultados = "NULL";
        consulta = "UPDATE Prueba SET "
                + "fecha=\'" + formatoFecha.format(p.getFecha())
                + "\', fechaResultado=" + fechaResultados
                + ", estado=\'" + estado
                + "\', tipo=\'" + tipo
                + "\', idPaciente=\'" + p.getIdPaciente()
                + "\', idMedico=\'" + p.getIdMedico()
                + "\', idTecnicoPruebas=\'" + p.getIdTecnicoPruebas()
                + "\', idCita=\'" + p.getIdCita()
                + "\' WHERE idPrueba="+ p.getIdPrueba()+";";

        Conexion.conectar();
        Conexion.actualizar(consulta);


       if (p.getTipo() == TipoPrueba.BioquimicaGeneral) { //si hay tablas
           consulta2 = "UPDATE PruebaBioquimica SET "
                   + "acidoUrico=" + ((BioquimicaGeneral)p).getAcidoUrico()
                   + ", creatinina=" + ((BioquimicaGeneral)p).getCreatinina()
                   + ", urea=" + ((BioquimicaGeneral)p).getUrea()
                   + ", glucosa=" + ((BioquimicaGeneral)p).getGlucosa()
                   + ", colesterol=" + ((BioquimicaGeneral)p).getColesterol()
                   + ", colesterolHDL=" + ((BioquimicaGeneral)p).getColesterolHDL()
                   + ", colesterolLDL=" + ((BioquimicaGeneral)p).getcolesterolLDL()
                   + ", trigliceridos=" + ((BioquimicaGeneral)p).getTrigliceridos()
                   + ", bilirrubinaTotal=" + ((BioquimicaGeneral)p).getBilirrubinaTotal()
                   + ", gammaGlutamiltransferosa=" + ((BioquimicaGeneral)p).getGammaGlutamiltransferasa()
                   + ", aspartatoTransaminasa=" + ((BioquimicaGeneral)p).getAspartatoTransaminasa()
                   + ", alaminaTransaminasa=" + ((BioquimicaGeneral)p).getAlaminaTransaminasa()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";
       }
       else if (p.getTipo() == TipoPrueba.HematologiaGeneral) { //si hay tablas
           consulta2 = "UPDATE PruebaHematologia SET "
                   + "basofilosPorc=" + ((HematologiaGeneral)p).getBasofilosPorc()
                   + ", concentracionHemoCorp=" +  ((HematologiaGeneral)p).getConcentracionHemoCorp()
                   + ", dispersionHematies=" +   ((HematologiaGeneral)p).getDispersionHematies()
                   + ", eosinofilos=" +   ((HematologiaGeneral)p).getEosinofilos()
                   + ", hematies=" +   ((HematologiaGeneral)p).getHematies()
                   + ", hematocritos=" +   ((HematologiaGeneral)p).getHematocritos()
                   + ", hemoglobinaCorpMedia=" + ((HematologiaGeneral)p).getHemoglobinaCorpMedia()
                   + ", hemoglobina=" +   ((HematologiaGeneral)p).getHemoglobina()
                   + ", leucocitos=" +   ((HematologiaGeneral)p).getLeucocitos()
                   + ", linfocitos=" +   ((HematologiaGeneral)p).getLinfocitos()
                   + ", monocitosPorc=" +   ((HematologiaGeneral)p).getMonocitosPorc()
                   + ", neutrofilos=" +   ((HematologiaGeneral)p).getNeutrofilos()
                   + ", neutrofilosPorc=" +   ((HematologiaGeneral)p).getNeutrofilosPorc()
                   + ", plaquetas=" +   ((HematologiaGeneral)p).getPlaquetas()
                   + ", volumenCorpMedio=" +   ((HematologiaGeneral)p).getVolumenCorpMedio()
                   + ", volumenPlaquetarioMedio=" +   ((HematologiaGeneral)p).getVolumenPlaquetarioMedio()
                   + ", monocitos=" +   ((HematologiaGeneral)p).getMonocitos()
                   + ", eosinofilosPorc=" +   ((HematologiaGeneral)p).getEosinofilosPorc()
                   + ", basofilos=" +   ((HematologiaGeneral)p).getBasofilos()
                   + ", linfocitosPorc=" +   ((HematologiaGeneral)p).getLinfocitosPorc()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";
       }
       else if(p.getTipo() == TipoPrueba.Hemostasia) { //si hay tablas
           consulta2 = "UPDATE PruebaHemostasia SET "
                   + "actividadProtombina=" + ((Hemostasia)p).getActividadProtombina()
                   + ", actividadProtombinaPorc=" + ((Hemostasia)p).getActividadProtombinaPorcentaje()
                   + ", tiempoTromboplastinaParcActivo=" + ((Hemostasia)p).getTiempoTombloplastinaParcialAct()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";        
       }
       else if ( p.getTipo() == TipoPrueba.Hormonas){
           consulta2 = "UPDATE PruebaHormonas SET "
                   + " tirotropina=" + ((Hormonas)p).getTirotropina()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";   
       }
       else if ( p.getTipo() == TipoPrueba.MarcadoresTumorales ) {
           consulta2 = "UPDATE PruebaMarcadoresTumorales SET "
                   + "PSA=" + ((MarcadoresTumorales)p).getPSA()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";
       }
       else if ( p.getTipo() == TipoPrueba.Urianalisis){
           consulta2 = "UPDATE PruebaUrianalisis SET "
                   + " sistematicoOrina=" + ((Urianalisis)p).getOrina()
                   + " WHERE idPrueba="+p.getIdPrueba()+";";
       }
       else if ( p.getTipo() == TipoPrueba.Radiografia){
           consulta2 = "UPDATE PruebaRadiografia SET "
                   + " tipo=\'" + ((Radiografia)p).getTipoRadiografia()
                   + "\' WHERE idPrueba="+p.getIdPrueba()+";";
       }

       Conexion.actualizar(consulta2);
       
       Conexion.desconectar();
    }

}
